package offer;

import java.util.HashSet;
import java.util.Set;

/**
 * @Author Elephas
 * @Date 2022/3/19
 **/
@FunctionalInterface
public interface IsHappy {
    boolean isHappy(int n);
}
class IsHappyImpl1 implements IsHappy{

    @Override
    public boolean isHappy(int n) {
        Set<Integer> appear = new HashSet<>();
        while(n != 1){
            appear.add(n);
            int sum = 0;
            while(n != 0){
                int reminder = n % 10;
                n /= 10;
                sum += reminder * reminder;
            }
            n = sum;
            if(appear.contains(n)){
                return false;
            }
        }
        return true;
    }
}

class IsHappyImpl2 implements IsHappy{
    public static void main(String[] args) {
        for (int i = 0; i < 101; i++) {
            System.out.print("," + new IsHappyImpl1().isHappy(i));
        }
    }
    boolean[] HAPPY_TABLE_IN_100 = new boolean[]{false,true,false,false,false,false,false,true,false,false,true,false,false,true,false,false,false,false,false,true,false,false,false,true,false,false,false,false,true,false,false,true,true,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,false,true,false,false,true,false,false,false,true,false,false,false,false,true,false,false,true,false,false,true,false,false,true};
    @Override
    public boolean isHappy(int n) {
        while(n > 100){
            int sum = 0;
            while(n != 0){
                int reminder = n % 10;
                n /= 10;
                sum += reminder * reminder;
            }
            n = sum;
        }
        return HAPPY_TABLE_IN_100[n];
    }
}
